﻿//#include<stdio.h>
//#include<stdlib.h>
//#include<Windows.h>
//#define LIST_INIT_SIZE 10
//#define LISTINCREMENT 10
//#define ElementType int
//typedef struct {
//	ElementType* num;
//	int length;
//	int listSize;
//}myList;
//
////------------------------顺序表的操作-----------------------------------//
////初始化列表
//int initList(myList& L) {
//	L.num = (ElementType*)malloc(sizeof(ElementType) * LIST_INIT_SIZE);
//	if (L.num == NULL) {
//		exit(0);
//	}
//	L.length = 0;
//	L.listSize = LIST_INIT_SIZE;
//	return 1;
//}
//
////获取某一元素
//int getItem(myList& L, int index, ElementType& e) {
//	if (index > L.length || index < 1) {
//		return -1;
//	}
//	else {
//		e = L.num[index - 1];
//		return 1;
//	}
//
//}
//
//
////修改某一元素
//int changeItem(myList& L, int index, ElementType myValue) {
//	if (index > L.length || index < 1) {
//		return -1;
//	}
//	else {
//		L.num[index - 1] = myValue;
//		return 1;
//	}
//
//}
//
////插入操作
//int insertItem(myList& L, int index, ElementType e) {
//	if (index > L.length + 1 || index < 1) {
//		return -1;
//	}
//	if (L.length >= L.listSize) {
//		printf("执行扩容操作\n");
//		ElementType* newArrary = (ElementType*)realloc(L.num, sizeof(ElementType) * (L.listSize + LISTINCREMENT));
//		if (newArrary == NULL) {
//			exit(0);
//		}
//		else {
//			L.num = newArrary;
//			L.listSize += LISTINCREMENT;
//		}
//	}
//	for (int j = L.length; j >= index; j--) {
//		L.num[j] = L.num[j - 1];
//	}
//	L.num[index - 1] = e;
//	L.length++;
//	return 1;
//	
//}
//
//
////删除操作
//int deleteItem(myList& L, int index,ElementType &e) {
//	if (index < 1 || index > L.length) {
//		return -1;
//	}
//	else {
//		e = L.num[index - 1];
//		for (int j = index; j < L.length; j++) {
//			L.num[j - 1] = L.num[j];
//		}
//		L.length--;
//		return 1;
//	}
//
//}
//
////打印列表里的数据
//int printMyList(myList& L) {
//	printf("列表中的数据：");
//	if (L.length < 1) {
//		return -1;
//	}
//	for (int i = 0; i < L.length; i++) {
//		printf("%d ", L.num[i]);
//		Sleep(100);
//	}
//	printf("\n");
//	return 1;
//}
//
////------------------------执行顺序表操作--------------------------------//
//void executeInsert(myList &L, int count) {
//	if (count == 10) {
//		printf("插入数据1-10：\n");
//		for (int value = 1; value <= 10; value++) {
//			Sleep(500);
//			insertItem(L, 1, value) == -1 ? printf("插入位置不合法\n") : printf("插入成功\n");
//		}
//		printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//		system("pause");
//	}
//	else if (count == 20) {
//		printf("插入数据1-20：\n");
//		for (int value = 1; value <= 20; value++) {
//			Sleep(500);
//			insertItem(L, 1, value) == -1 ? printf("插入位置不合法\n") : printf("插入成功\n");
//		}
//		printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//		system("pause");
//	}
//	else {
//		printf("插入位置不合法测试:\n");
//		insertItem(L, -1, 100) == -1 ? printf("插入位置不合法\n") : printf("插入成功\n");
//		insertItem(L, -2, 100) == -1 ? printf("插入位置不合法\n") : printf("插入成功\n");
//		insertItem(L, 100, 100) == -1 ? printf("插入位置不合法\n") : printf("插入成功\n");
//		insertItem(L, 105, 100) == -1 ? printf("插入位置不合法\n") : printf("插入成功\n");
//		printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//		system("pause");
//	}
//}
//
//void executeGet(myList& L) {
//	printf("获取指定的数据:\n");
//	int e;
//	for (int i = 0; i <= 15; i++) {
//		Sleep(500);
//		getItem(L, i, e) == -1 ? printf("获取位置不合法\n") : printf("获取到位置为%d的数据：%d\n", i, e);
//	}
//	printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//	system("pause");
//}
//void executeDelete(myList& L) {
//	for (int i = 1; i <= 15; i++) {
//		Sleep(500);
//		int e;
//		deleteItem(L, 1, e) == -1 ? printf("删除位置不合法\n") : printf("成功删除数据：%d\n", e);
//	}
//	printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//	system("pause");
//}
//
//void executeUpdate(myList& L) {
//	for (int i = -1; i <= 20; i++) {
//		Sleep(500);
//		changeItem(L, i, i) == -1 ? printf("更改位置不合法\n") : printf("修改成功\n");
//	}
//	printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//	system("pause");
//}
//void testMyList() {
//	myList L;
//	initList(L);
//	executeInsert(L,10);  //执行插入操作
//	system("cls");
//	printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//	executeGet(L);		 //执行获取元素操作
//	system("cls");
//	printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//	executeDelete(L);    //执行删除元素操作
//	system("cls");
//	printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//	executeInsert(L, 20); //执行插入扩容操作
//	system("cls");
//	printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//	executeUpdate(L);     //执行更新元素操作
//	system("cls");
//	printMyList(L) == -1 ? printf("此时列表数据为空\n") : printf("打印完成\n");
//	executeInsert(L, 100); //执行插入不合法元素操作;
//
//}
////------------------------合并数组-----------------------------------//
//void insertValue(myList &L1, myList& L2) {
//	int num1[10] = { 1,3,3,5,7,7,7,9,11,13 };
//	int num2[12] = { 2,4,6,6,8,10,10,10,12,14,16,18 };
//	int sizeL1 = sizeof(num1) / 4;
//	int sizeL2 = sizeof(num2) / 4;
//	for (int i = 0; i < sizeL1; i++) {
//		insertItem(L1, i + 1, num1[i]);
//	}
//	for (int i = 0; i < sizeL2; i++) {
//		insertItem(L2, i + 1, num2[i]);
//	}
//	printf("当前L1里的数据：");
//	printMyList(L1);
//	printf("当前L2里的数据：");
//	printMyList(L2);
//}
//
////数组合并
//void mergeList() {
//	myList L1, L2, L3;
//	initList(L1);
//	initList(L2);
//	initList(L3);
//	insertValue(L1, L2);
//	int i = 1, j = 1, k = 1;
//	while (i <= L1.length && j <= L2.length) {
//		L1.num[i - 1] < L2.num[j - 1] ? insertItem(L3, k++, L1.num[i++ - 1]) : insertItem(L3, k++, L2.num[j++ - 1]);
//	}
//	while (i <= L1.length) {
//		insertItem(L3, k++, L1.num[i++ - 1]);
//	}
//	while (j <= L2.length) {
//		insertItem(L3, k++, L2.num[j++ - 1]);
//	}
//	printf("合并后L3中的数据：");
//	printMyList(L3);
//	printf("长度为：%d\n", L3.length);
//
//}
//int main() {
//	testMyList();
//	//mergeList();
//	return 0;
//}